import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router'
import NProgress from "nprogress";
import LayoutView from '@/views/LayoutView.vue';
import LoginView from '@/views/LoginView.vue';
import ErrorPage from '@/views/ErrorPage.vue';
import { usePeopleStore } from '@/stores/PeopleStore';
import routerMap from './routerMap';
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: "/",
      name: "main",
      component: LayoutView,
    },
    {
      path: "/login",
      name: "login",
      meta: { nologin: true },
      component: LoginView
    },
    {
      path: '/:pathMatch(.*)',
      name: 'error',
      component: ErrorPage
    }
  ],
})
let initBool: boolean = true;
// 前置路由守卫
router.beforeEach((to, from, next) => {
  // 开启进度条插件
  NProgress.start();
  // 获取pinia people的userInfo 里面由token属性可以用来验证
  const peopleStore = usePeopleStore()
  console.log(to.meta,to.path);
  
  // 访问首页先简单的进行拦截，让其跳转到登陆页面    上面这一大段相当于处理首次登陆 时候的逻辑
  if (!to.meta.nologin) {//这个条件筛选出是否进入的不是登录页  如果不是登录则进行下面逻辑判断
    
    if (!peopleStore.userInfo || !peopleStore.userInfo.token) {// 404页和首页要进入这个判断  如果userInfo都找不到则直接跳转登录页 
      // 还要判断userInfo当中是否存有token  如果没有也跳转到登陆页面
      next({ name: 'login' })
      NProgress.done()
      return;   //跳转到登录页了就阻止下方代码执行
    }
  }else{ 
    // 只在login加上meta 这个else表示我们走的是登录页，同样阻止下方代码执行  如果不阻止进入下方条件的话  就会出现首次登录无法正常跳转到首页   
    next()  
    return;
  }

  //下面这一大段是处理登录之后的逻辑
  if (initBool) {
    initBool = false
    const store = usePeopleStore();
    routerMap.forEach((item: RouteRecordRaw) => {
      if (store.userInfo.routes.includes(item.path)) {
        router.addRoute("main", item);
      }
    })
    next({ path: to.path });  //原因出在这里，to.path已经不是原来的to.path了  相当于还没登录就访问了whter自然是找不到了
    NProgress.done();
    return;
  }
  next()
  NProgress.done()
})
// 后置路由守卫
router.afterEach((to, from) => {
  // 清理副作用
  // NProgress.remove();
})
export default router
